
console.log( 'macro task 1: begin' );

setImmediate( ()=> console.log( 'macro task 2') );

let p = Promise.resolve('\t1 micro task (fulfilled)');
p.then( result => console.log( result ) )
 .catch( reason => console.log( reason ) )
 .finally( () => console.log('\t2 micro task') );

let t = Promise.reject('\t3 micro task (rejected)');
t.then( result => console.log(result) )
 .catch( reason => console.log( reason ) )
 .finally( () => console.log('\t4 micro task') );

let divide = (a,b) => {
    console.log('\t5 micro task');
    let r = a / b;
    return r;
}

process.nextTick( divide, 100, 3 );

console.log( 'macro task 1: end' );


// 可以产生微任务的操作:
// 1、用Promise产生微任务
//    此处指通过 Promise实例 调用 then 、catch 、finally 后，
//    将来调用它们的回调函数属于微任务
// 2、process.nextTick( callback [, ...params])
//    此处指调用 callback 函数属于微任务
//    仅限 node.js 环境
// 3、MutaionObserver
//    在 MutaionObserver实例 中调用的回调函数属于微任务
//    仅限浏览器环境
